A user interface (UI) in computing generally refers to the graphical, textual, or auditory information a computer program presents to a user, and the control mechanism employed by the user to communicate with the computer program. A UI typically includes a plurality of UI components. For example, in a graphical user interface (GUI), a UI component is a group of graphical elements. The graphical elements include, but are not limited to, a button, a window, a panel, a dialog, and a combination of the above. The graphical elements, when grouped together to provide a specific function, form a UI component. For example, in MICROSOFT® Word, a UI component may be a menu bar, a status bar, or a writing area. Generally, different application programs include different UI components.
UI components are often inter-dependent. In the above example of MICROSOFT® Word, when a user moves a cursor in the writing area, the status bar tracks the cursor movement and shows the correct position of the cursor. The status bar updates the cursor position by receiving a message from the writing area, informing the status bar of the cursor movement. Thus, the operation of the writing area invokes the operation of the status bar and, therefore, there is a dependency between the writing area and the status bar.
Due to this inter-dependency, the development and testing of the UI components are often complex and time-consuming. It is difficult to separate the UI components and develop them in parallel. Moreover, due to the inter-dependency, the UI components are conventionally designed using the same programming language and under the same operating environment to ensure that inter-component messages are passed without errors. This results in the complexity, inflexibility, and inextensibility of the UI logic that implements the UI components.
If the UI components are written in different languages, under different operating systems, or run on different machines, it is very difficult to test these UI components simultaneously. For example, in a conventional system, it would be difficult to simultaneously test UI components written in different languages (such as JAVA, C++, and .Net). Similarly, it would also be difficult to simultaneously test UI components developed under different operating systems (such as Windows, LINUX, and Unix).